package com.artevivo.managedBeans;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.faces.bean.RequestScoped;

import org.springframework.stereotype.Controller;

import com.artevivo.entidades.Curso;
import com.artevivo.entidades.Especialidad;
import com.artevivo.entidades.Estilo;
import com.artevivo.services.CursoService;
import com.artevivo.services.EspecialidadService;
import com.artevivo.services.SeleccionEspecialidadService;

@Controller(value = "seleccionEspecialidadMB")
@RequestScoped
public class SeleccionEspecialidadMB {

    @Resource
    private SeleccionEspecialidadService seleccionEspecialidadService;

    @Resource
    private EspecialidadService especialidadService;

    @Resource
    private CursoMB cursoMB;

    @Resource
    private CursoService cursoService;

    @Resource
    private SessionManagedBean sessionMB;

    private List<Especialidad> selectedEspecialidades;

    private List<Curso> selectedCursos;

    public void anyadir() {
        try {
            Especialidad especialidad = especialidadService.obtenerEspecialidadPorID(new Long(cursoMB.getSelectedEspecialidadId()));
            seleccionEspecialidadService.guardarEspecialidadConMatricula(especialidad, sessionMB.getSelectedMatricula());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<Especialidad> getListaEspecialidades() {
        List<Especialidad> res = seleccionEspecialidadService.especialidadesMatriculado(sessionMB.getSelectedMatricula());

        return res;
    }

    public List<Curso> getListaCursos() {
        List<Curso> cursos = seleccionEspecialidadService.cursosMatriculado(sessionMB.getSelectedMatricula());
        Map<Estilo, Especialidad> map = new HashMap<Estilo, Especialidad>();
        for (Curso c : cursos) {
            map.put(c.getEstilo(), c.getEspecialidad());
        }
        List<Curso> cs = new ArrayList<Curso>();

        for (Estilo es : map.keySet()) {
            cs.add(cursoService.obtenerCursoPorEspecialidadEstilo(sessionMB.getSelectedMatricula().getAnyo(), map.get(es), es).get(0));
        }

        return cs;
    }

    public List<Especialidad> getListaEspecialidadesAnyo() {
        return especialidadService.obtenerListaEspecialidadesAnyo(sessionMB.getSelectedAnyo());
    }

    public void borrar() {
        try {
            seleccionEspecialidadService.borrarCursosMatricula(selectedCursos, sessionMB.getSelectedMatricula());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<String> generarPrecio() {

        List<String> res = new ArrayList<String>();
        /*
         * try {
         * 
         * Map<Especialidad, Double> especialidadPrecio =
         * seleccionEspecialidadService
         * .obtenerMapaEspecialidadesPrecio(sessionMB .getSelectedMatricula());
         * Map<Estilo, Double> estiloPrecio =
         * seleccionEspecialidadService.obtenerMapaEstilosPrecio
         * (sessionMB.getSelectedMatricula());
         * 
         * List<Especialidad> especialidades = new ArrayList<Especialidad>();
         * especialidades.addAll(especialidadPrecio.keySet());
         * 
         * List<Estilo> estilos = new ArrayList<Estilo>();
         * estilos.addAll(estiloPrecio.keySet()); if (!especialidades.isEmpty())
         * { res.add("ESPECIALIDADES COMPLETAS");
         * 
         * for (Especialidad es : especialidades) { String precio =
         * especialidadPrecio.get(es).toString(); String nombre =
         * es.getNombre(); res.add(nombre + " .......... " + precio); } }
         * 
         * if (!estilos.isEmpty()) { res.add("ASIGNATURAS SUELTAS");
         * 
         * for (Estilo as : estilos) { String precio =
         * estiloPrecio.get(as).toString(); String nombre = as.getNombre();
         * res.add(nombre + "(" + as.getEspecialidad().getNombre() + ")" +
         * " .......... " + precio); } } Double total = 0.; for (Double d :
         * estiloPrecio.values()) { total = total + d; } for (Double d :
         * especialidadPrecio.values()) { total = total + d; }
         * res.add("MENSUALIDAD: " + total + "euros");
         * 
         * } catch (Exception e) { e.printStackTrace(); }
         */
        return res;
    }

    public List<Especialidad> getSelectedEspecialidades() {
        return selectedEspecialidades;
    }

    public void setSelectedEspecialidades(List<Especialidad> selectedEspecialidades) {
        this.selectedEspecialidades = selectedEspecialidades;
    }

    public List<Curso> getSelectedCursos() {
        return selectedCursos;
    }

    public void setSelectedCursos(List<Curso> selectedCursos) {
        this.selectedCursos = selectedCursos;
    }

}
